// 封装axios拦截器（请求前 ，响应后）
// 1. 引入axios
import axios from 'axios';
import qs from 'qs';
import {Loading} from 'element-ui';

// 2. 创建axios实例
const instance = axios.create({
    timeout: 10000,
    headers: { 'X-Custom-Header': 'foobar' }
})
let loadingInstance;
let count = 0;

// 请求前
instance.interceptors.request.use(config => {
    if(count == 0) {
        loadingInstance = Loading.service({
            target: 'homepage-content'
        })
    }
    count ++;
    const token = localStorage.getItem('token')
    if (config.method == 'post' || config.method == 'put') {
        // 判断token存不存在
        if (token) {
            // console.log(JSON.stringify(config.data))
            config.data.token = token
        }
        config.data = qs.stringify(config.data, { allowDots: true, arrayFormat: 'repeat' })

    } else if (config.method == 'get' || config.method == 'delete') {
        // console.log(config.params)
        // 判断token存不存在
        if (token) {
            config.params.token = token
        }

        // console.log(config.url)
        // 1. 自己拼接参数在url后面 {ids: [1,2],token: 'xxx'} => ids=1&ids=2&token = 'xxx'
        // console.log(qs.stringify(config.params, {arrayFormat: 'repeat'}))
        config.url = config.url + '?' + qs.stringify(config.params, {arrayFormat: 'repeat'})
        // 2. 删除原来的params属性上的对象值
        delete config.params
    }
    // console.log(config)
    return config;
}, err => {
    console.log(err)
})

// 响应后
instance.interceptors.response.use(result => {
    count --;
    if(count == 0){
        loadingInstance.close();
    }
    // console.log(result)
    return result.data;
}, err => {
    console.log(err)
})

// 导出实例
export default instance